home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / Amazon.fr (data-video).ifs < prev    next >
Encoding:
Text File  |  2004-12-08  |  13.5 KB  |  423 lines

  1. // GETINFO SCRIPTING
  2. // Amazon.fr (image et donnΘes complΦtes ajoutΘes au donnΘes existantes)
  3.  
  4. (***************************************************
  5.  *  Script d'importation pour :                    *
  6.  *  AMAZON FRANCE , http://www.amazon.fr           *
  7.  *                                                 *
  8.  *  Script by Willems Olivier based on the script  *
  9.  *  2003-12-25 : correction by antp                *
  10.  *  2004-12-08 : Mofification Xavier Tanneau       *
  11.  *               pour import VidΘo                 *
  12.  *                                                 *
  13.  *  A utiliser avec Ant Movie Catalog 3.4.0        *
  14.  *  www.ant.be.tf/moviecatalog ╖╖╖ www.buypin.com  *
  15.  *                                                 *
  16.  *  The source code of the script can be used in   *
  17.  *  another program only if full credits to        *
  18.  *  script author and a link to Ant Movie Catalog  *
  19.  *  website are given in the About box or in       *
  20.  *  the documentation of the program               *
  21.  ***************************************************)
  22.  
  23. program AMAZON_FR;
  24.  
  25. //ParamΦtres du script
  26. const
  27.  
  28.   // Mettre les valeurs α True pour importer les champs, ou False pour ne pas en tenir compte
  29.   ConfirmTitre = True;        // False : ne demande pas de confirmation du titre avant recherche
  30.   TempsPause = 500;        // 1000 = 1 Seconde (permet d'Θviter les timeout en cas de saturation serveur)
  31.   ImportImage = True;        // False : n'importe pas d'image
  32.   ImportGrandeImage = True;     // False : petite image importΘe
  33.   ImportBonus = True;        // False : n'importe pas les bonus dans la case Remarques
  34.   ImportTitreOriginal = True;    // False : n'importe pas le titre original
  35.   ImportTitreTraduit = True;    // False : n'importe pas le titre franτais
  36.   ImportLangue = True;    // False : n'importe pas les langues
  37.   ImportActeur = True;    // False : n'importe pas les acteurs
  38.   ImportRealisateur = True;    // False : n'importe pas le rΘalisateur
  39.   ImportProducteur = True;    // False : n'importe pas le producteur
  40.   ImportSynopsis = True;    // False : n'importe pas le descriptif
  41.   ImportDate = True;    // False : n'importe pas la date de parution
  42.   ImportGenre = True;    // False : n'importe pas le premier genre
  43.   ImportURL = True;       // False ne place pas l'url du film
  44.   ImportAddImport = False;  // False : remplace le contenu des champs par les donnΘes importΘes
  45.  
  46. var
  47.   MovieName: string;
  48.  
  49. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  50. var
  51.   i: Integer;
  52. begin
  53.   result := -1;
  54.   if StartAt < 0 then
  55.     StartAt := 0;
  56.   for i := StartAt to List.Count-1 do
  57.     if Pos(Pattern, List.GetString(i)) <> 0 then
  58.     begin
  59.       result := i;
  60.       Break;
  61.     end;
  62. end;
  63.  
  64. procedure AnalyzePage(Address: string);
  65. var
  66.   Page: TStringList;
  67.   LineNr: Integer;
  68.  
  69. begin
  70.   Sleep(TempsPause); // Attente X seconde : Evite les timeout sur le serveur
  71.   Page := TStringList.Create;
  72.   Page.Text := GetPage(Address);
  73.  
  74.  
  75.  
  76.   if pos('Sur ce vidéo', Page.Text) > 0 then
  77.     begin
  78.  
  79.      AnalyzeMoviePage(Page);
  80.     // Si on veut on prend l'adresse de la page
  81.     if ImportURL then
  82.       begin
  83.       SetField(fieldURL, Address);
  84.       end;
  85.     end
  86.   else
  87.  
  88.   if pos('satisfaisante pour votre recherche sur', Page.Text) > 0 then
  89.   begin
  90.     ShowMessage('Aucun Film TrouvΘ pour : ' + MovieName);
  91.   end else
  92.  
  93.   if pos('Les articles les plus recherchés correspondant à', Page.Text) > 0 then
  94.   begin
  95.     PickTreeClear;
  96.     LineNr := 0;
  97.     LineNr := FindLine('résultats au total pour', Page, LineNr);
  98.     if LineNr > -1 then
  99.     begin
  100.       //PickTreeAdd('Films TrouvΘs :', '');
  101.       PickTreeAdd('Films TrouvΘs pour ' + MovieName + ' :', '');
  102.       AddMoviesTitles(Page, LineNr);
  103.     end;
  104.     if PickTreeExec(Address) then
  105.       AnalyzePage(Address);
  106.   end else
  107.  
  108.   begin
  109.     PickTreeClear;
  110.     LineNr := 0;
  111.     LineNr := FindLine('résultats au total pour', Page, LineNr);
  112.     if LineNr > -1 then
  113.     begin
  114.       //PickTreeAdd('Films TrouvΘs :', '');
  115.       PickTreeAdd('Films TrouvΘs pour ' + MovieName + ' :', '');
  116.       AddMoviesTitles(Page, LineNr);
  117.     end;
  118.     if PickTreeExec(Address) then
  119.       AnalyzePage(Address);
  120.   end;
  121.  
  122.   Page.Free;
  123. end;
  124.  
  125. procedure AnalyzeMoviePage(Page: TStringList);
  126. var
  127.   Line, Value, Value2, FullValue: string;
  128.   LineNr: Integer;
  129.   BeginPos, EndPos: Integer;
  130.   Dummy: string;
  131.  
  132.  
  133. begin
  134.  
  135.    // Genre
  136.   if ImportGenre then
  137.     begin
  138.     LineNr := FindLine('Rechercher des vidéos par', Page, 0);
  139.     if LineNr > -1 then
  140.     begin
  141.      Line := Page.GetString(LineNr+2);
  142.       EndPos := pos('">', Line);
  143.       Value := copy(Line, 1, EndPos-1);
  144.       if ImportAddImport then
  145.         begin
  146.         GetField(fieldCategory, Dummy);
  147.         Value := Dummy + Value;
  148.         SetField(fieldCategory, Value);
  149.         end
  150.       else
  151.         SetField(fieldCategory, Value);
  152.     end;
  153.   end;
  154.  
  155.      // Date parution
  156.   if ImportDate then
  157.     begin
  158.     LineNr := FindLine('Date de parution : ', Page, 0);
  159.     if LineNr > -1 then
  160.     begin
  161.       Line := Page.GetString(LineNr);
  162.       BeginPos := pos('Date de parution : ', Line)+24;
  163.       Line := copy(Line, Beginpos, Length(Line) - Beginpos);
  164.       EndPos := pos('<br>', Line);
  165.       Value := copy(Line, 1, EndPos-1);
  166.       Value := copy (Value, Length(Value)-4,Length(Value)); // prend les 4 dernier
  167.         // place l'annΘe
  168.       SetField(fieldYear, Value);
  169.     end;
  170.   end;
  171.  
  172.    // Langue
  173.   if ImportLangue then
  174.     begin
  175.     LineNr := FindLine('Langues et formats sonores : ', Page, 0);
  176.     if LineNr > -1 then
  177.     begin
  178.       Line := Page.GetString(LineNr);
  179.       BeginPos := pos('Langues et formats sonores : ', Line)+29;
  180.       line := copy(line,beginpos, length(line) - beginpos);
  181.       EndPos := pos('<BR>', Line);
  182.       Value := copy(Line, 1, EndPos-1);
  183.       if ImportAddImport then
  184.         begin
  185.         GetField(fieldLanguages, Dummy);
  186.         Value := Dummy + Value;
  187.         SetField(fieldLanguages, Value);
  188.         end
  189.       else
  190.         SetField(fieldLanguages, Value);
  191.     end;
  192.   end;
  193.  
  194.  
  195.    // Acteur
  196.   if ImportActeur then
  197.     begin
  198.     Value := '';
  199.     // on recherche la liste des acteurs
  200.     LineNr := FindLine('<b>Avec :</b>', Page, 0);
  201.     LineNr := LineNr -1;  // astuce pour redΘmarrer de cette ligne
  202.                           // sans pour autant boucler α l'infini dans le while
  203.     while LineNr > -1 do
  204.       // si on a trouvΘ on boucle sur les lignes de la liste des acteurs
  205.       begin
  206.       // on cherche la clΘ
  207.       LineNr := FindLine('field-actor=', Page, LineNr+1);
  208.       if LineNr > -1 then
  209.         begin
  210.         // si on a trouvΘ
  211.         Line := Page.GetString(LineNr);
  212.         repeat
  213.           //on boucle sur les acteurs de la ligne
  214.           BeginPos := pos('field-actor=', Line);
  215.           if BeginPos > 0 then
  216.             begin
  217.             BeginPos := BeginPos+12;
  218.             // supprime le dΘbut de la ligne, rΘduit lla liste des acteurs
  219.             Line := copy(Line,BeginPos, Length(Line) - BeginPos);
  220.             EndPos := pos('/', Line);
  221.             // reprend le nom de l'acteur et l'ajoute
  222.             Value := Value + ', ' + copy(Line, 1, EndPos - 1);
  223.             end;
  224.         until BeginPos <= 0;  // ne sort que s'il n'y a plus d'acteur dans la ligne
  225.         end;
  226.       end;  // ne sort que s'il n'y a plus de lignes avec des acteurs
  227.  
  228.     if Length(Value)> 0 then
  229.       // si on a trouvΘ des acteurs
  230.       begin
  231.       Value := copy(Value, 3, Length(Value)-2);   // Retire le premier ', '
  232.       Value := StringReplace(Value, '%20', ' ');  // supprime les '%20'
  233.       if ImportAddImport then
  234.         begin
  235.         GetField(fieldActors, Dummy);
  236.         Value := Dummy + Value;
  237.         SetField(fieldActors, Value);
  238.         end
  239.       else
  240.         SetField(fieldActors, Value);
  241.       end;
  242.     end;
  243.  
  244.    // RΘalisateur
  245.   if ImportRealisateur then
  246.     begin
  247.     LineNr := FindLine('field-director=', Page, 0);
  248.     if LineNr > -1 then
  249.     begin
  250.       Line := Page.GetString(LineNr);
  251.       BeginPos := pos('field-director=', Line)+15;
  252.       line := copy(line,beginpos, length(line) - beginpos);
  253.       EndPos := pos('/', Line);
  254.       Value := copy(Line, 1, EndPos-1);
  255.       Value := StringReplace(Value, '%20', ' ');
  256.       if ImportAddImport then
  257.         begin
  258.         GetField(fieldDirector, Dummy);
  259.         Value := Dummy + Value;
  260.         SetField(fieldDirector, Value);
  261.         end
  262.       else
  263.         SetField(fieldDirector, Value);
  264.     end;
  265.   end;
  266.   
  267.     // Producteur
  268.   if ImportProducteur then
  269.     begin
  270.     LineNr := FindLine('diteur :', Page, 0);
  271.     if LineNr > -1 then
  272.     begin
  273.       Line := Page.GetString(LineNr);
  274.       BeginPos := pos('diteur :', Line)+14;
  275.       line := copy(line,beginpos, length(line) - beginpos);
  276.       EndPos := pos('<br>', Line);
  277.       Value := copy(Line, 1, EndPos-1);
  278.       if ImportAddImport then
  279.         begin
  280.         GetField(fieldProducer, Dummy);
  281.         Value := Dummy + Value;
  282.         SetField(fieldProducer, Value);
  283.         end
  284.       else
  285.         SetField(fieldProducer, Value);
  286.     end;
  287.   end;
  288.  
  289.   // Image
  290.   if ImportImage then
  291.   begin
  292.     LineNr := FindLine('<a href="http://images-eu.amazon.com/images/P/', Page, 0);
  293.     if LineNr > -1 then
  294.     begin
  295.       Line := Page.GetString(LineNr);
  296.       BeginPos := pos('src="', Line) + 4;
  297.       Delete(Line, 1, BeginPos);
  298.       EndPos := pos('"', Line);
  299.       Value := copy(Line, 1, EndPos - 1);
  300.       if ImportGrandeImage then
  301.         Value := StringReplace(Value, 'MZZZZZZZ', 'LZZZZZZZ'); // Change l'URL pour prendre la grande au lieu de la petite image
  302.       Sleep(TempsPause*3); // Attente 2X seconde : Evite les timeout sur le serveur
  303.       GetPicture(Value, False); // False = stocke l'image dans la base
  304.     end;
  305.   end;
  306.  
  307.    // Titre Original
  308.   if ImportTitreOriginal then
  309.     begin
  310.     LineNr := FindLine('Titre Original : ', Page, 0);
  311.     if LineNr > -1 then
  312.     begin
  313.       Line := Page.GetString(LineNr);
  314.       BeginPos := pos('Titre Original : ', Line)+27;
  315.       EndPos := pos('<br>', Line);
  316.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  317.       SetField(fieldOriginalTitle, Value);
  318.      end;
  319.   end;
  320.  
  321.    // Titre Traduit
  322.   if ImportTitreTraduit then
  323.     begin
  324.     LineNr := FindLine('Amazon.fr : Vidéo: ', Page, 0);
  325.     if LineNr > -1 then
  326.       begin
  327.       Line := Page.GetString(LineNr);
  328.       BeginPos := pos('Amazon.fr : Vidéo: ', Line)+31;
  329.       EndPos := pos('</title>', Line);
  330.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  331.       SetField(fieldTranslatedTitle, Value);
  332.      end;
  333.     end;
  334.  
  335.   // Bonus
  336.   if ImportBonus then
  337.   begin
  338.     LineNr := FindLine('<br><b>Bonus :</b><br>', Page, 0);
  339.     if LineNr > -1 then
  340.     begin
  341.       LineNr := LineNr + 1;
  342.       Line := Page.GetString(LineNr);
  343.       EndPos := Pos('<BR>', Line);
  344.       if EndPos > 0 then
  345.         Delete(Line, EndPos, Length(Line));
  346.       Value := 'Bonus :' + #13#10 + StringReplace(StringReplace(Line, '<br>', #13#10), '•', '-');
  347.       HTMLDecode(Value);
  348.       SetField(fieldComments, Value);
  349.     end;
  350.   end;
  351.  
  352.   // Description, synopsis du film
  353.   if ImportSynopsis then
  354.     begin
  355.     LineNr := FindLine('Synopsis', Page, 0);
  356.     if LineNr > -1 then
  357.       begin
  358.       Line := Page.GetString(LineNr+1);     // prend la ligne suivante car synopsis est seule sur sa ligne
  359. //      BeginPos := Pos('Synopsis', Line);
  360.   //    Line := copy(Line, BeginPos, Length(Line)- BeginPos); // ne garde que la fin
  361.       BeginPos := Pos('<span class="serif">', Line)+20;
  362.       EndPos := Pos('</span>', Line);
  363.       Value := copy (Line,BeginPos,EndPos-BeginPos);
  364.       Value := StringReplace(StringReplace(Value, '<br>', #13#10), '•', '-');
  365.       HTMLDecode(Value);
  366.       SetField(fieldDescription, Value);
  367.       end;
  368.     end;
  369.  
  370.   DisplayResults;
  371. end;
  372.  
  373. procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
  374. var
  375.   Line: string;
  376.   MovieTitle, MovieAddress: string;
  377.   StartPos: Integer;
  378.   StartImg: Integer;
  379.   StartLst: Integer;
  380.   LastLine: Integer;
  381.  
  382. begin
  383.   repeat
  384.     LineNr := LineNr + 1;
  385.     Line := Page.GetString(LineNr);
  386.     LastLine := Page.count;
  387.     StartPos := pos('<a href=/exec/obidos/ASIN/', Line);
  388.     StartImg := pos('<img src="http://images-eu.amazon.com/images/', Line);
  389.     StartLst := pos('</a>', Line);
  390.     if StartPos+StartImg+StartLst < StartPos+StartPos+StartPos-StartImg-StartLst then
  391.     begin
  392.       Startpos := Startpos + 9;
  393.       MovieAddress := copy(Line, StartPos, pos('qid', Line) - StartPos);
  394.       StartPos := pos('<b>', Line) + 3;
  395.       MovieTitle := copy(Line, StartPos, (StartPos + 150)- StartPos); 
  396.       HTMLDecode(Movietitle);
  397.       PickTreeAdd(MovieTitle, 'http://www.amazon.fr/' + MovieAddress);
  398.     end;
  399.   until (LineNr > Lastline);
  400. end;
  401.  
  402. begin
  403.   if CheckVersion(3,4,0) then
  404.   begin
  405.     MovieName := GetField(fieldTranslatedTitle);
  406.  
  407.     if MovieName = '' then
  408.       MovieName := GetField(fieldOriginalTitle);
  409.  
  410.   if ConfirmTitre then
  411.     begin
  412.      if Input('Amazon.fr Import', 'Entrer le titre du film :', MovieName) then
  413.       begin
  414.        AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=vhs-fr&field-title='+UrlEncode(MovieName));
  415.       end;
  416.      end else
  417.       begin
  418.        AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=vhs-fr&field-title='+UrlEncode(MovieName));     
  419.       end;
  420.   end else
  421.    ShowMessage('Ce script requiert une version plus rΘcente de Ant Movie Catalog (au moins la version 3.4.0)');
  422. end.
  423.